package leetcode8;

public class test35 {
    /**
     * 226. 翻转二叉树
     * @param root
     * @return
     */
    //DFS递归交换
    public TreeNode invertTree(TreeNode root) {
        //递归函数的终止条件，节点为空时返回
        if(root==null) {
            return null;
        }
        //下面三句是将当前节点的左右子树交换
        TreeNode tmp = root.right;
        root.right = root.left;
        root.left = tmp;
        //递归交换当前节点的 左子树
        invertTree(root.left);
        //递归交换当前节点的 右子树
        invertTree(root.right);
        //函数返回时就表示当前这个节点，以及它的左右子树
        //都已经交换完了
        return root;
    }
    //BFS队列迭代
    public TreeNode invertTree(TreeNode root) {
        if(root == null)return null;
        LinkedList<TreeNode> list = new LinkedList<>();
        list.add(root);
        while(!list.isEmpty()){
            TreeNode temp = list.poll();
            TreeNode res = temp.left;
            temp.left = temp.right;
            temp.right = res;
            if(temp.left != null){
                list.add(temp.left);
            }
            if(temp.right != null){
                list.add(temp.right);
            }
        }
        return root;
    }

}
